<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+


require_once(CONFIG_DIR.CONFIG_FILE);

/**
 * @file data_add.test.php
 * @brief файл содержит код для добавления тестовых данных в базу MySql проекта WebFormsQA \n
 * @include data_add.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */


/**
 * @class DataAddTest
 * @brief Класс добавляет общие данные в базу, которые затем могут использоваться
 *        всеми тестами, для исключения дублирования, доступ осуществляется через
 *        глобальный массив GLOBALS
 *        Исходный код [ @ref data_add.test.php ]        
 */
class DataAddTest extends PHPUnit_TestCase {

//            echo "<br>**************************************<br>";
//            var_dump($);
//            echo "<br>**************************************<br>";

//            Utils::outInFile("result8", $res);

    /**
     * Метод добавляет в базу общие данные
     * должен вызываться ПЕРВЫМ
     */
    function AddTestDataInDatabase() 
    {
		/*
        $error = "";
        $root_mysql = "";
        $create_user = false;
        if( DataBase::createDatabase(DB_HOST, $root_mysql, TEST_DB_NAME, DB_USER, DB_PASS, $create_user, &$error) ) {
        	// создание тестовой базы, если она не существует
			echo "<br>Тестовая база данных успешно создана<br>";			        	
        }
        */
        // логин
    	$GLOBALS["test_admin_login"] = base64_encode('admin');		
    	// хешированный пароль администратора
    	$GLOBALS["test_admin_pass"] = md5('admin');				
    	
        
        $base = new QuestionBase(DB_HOST, DB_USER, DB_PASS, TEST_DB_NAME);
		$code = $base->checkHostUserPassAndNameBase(&$error);
				
		if( $code == 1 ) $error_input_bd = ERROR_CONNECT_BD;
		else if( $code == 2 ) $error_input_bd = ERROR_SELECT_BD;

		if( isset( $error_input_bd ) ) echo "$error_input_bd <br>";
		$this->assertTrue( !$code );
		
		
		if( $base->Init() ) {
        	// на всякий случай пробую заново создать таблицы БД
        	$base->createTables($error);
			//echo "<br>Таблицы базы данных успешно созданы<br>";        		
        }
    
        $GLOBALS["base"] = &$base;
        // добавляем несколько категорий
        $str1       = "категория1";
        $str1_1     = "категория1_1";
        $str1_2     = "категория1_2";
        $str1_2_1   = "категория1_2_1";

        $str2       = "категория2";
        $str3       = "категория3";

        // добавляем корневые категории
        $parent     = 0;
        $base->db_query("
            INSERT INTO ".CATEGORIES_TABLE."(name, parent)
            VALUES ( '$str1', '$parent' )"
        ) or die($base->db_error());

        $parent = $base->db_insert_id();

        $base->db_query("
            INSERT INTO ".CATEGORIES_TABLE."(name, parent)
            VALUES ( '$str1_1', '$parent' )"
        ) or die($base->db_error());

        $base->db_query("
            INSERT INTO ".CATEGORIES_TABLE."(name, parent)
            VALUES ( '$str1_2', '$parent' )"
        ) or die($base->db_error());

        $parent = $base->db_insert_id();

        $base->db_query("
            INSERT INTO ".CATEGORIES_TABLE."(name, parent)
            VALUES ( '$str1_2_1', '$parent' )"
        ) or die($base->db_error());

        // корневые категории
        $parent = 0;

        $base->db_query("
            INSERT INTO ".CATEGORIES_TABLE."(name, parent)
            VALUES ( '$str2', '$parent' )"
        ) or die($this->db_error());


        $base->db_query("
            INSERT INTO ".CATEGORIES_TABLE."(name, parent)
            VALUES ( '$str3', '$parent' )"
        ) or die($this->db_error());


        
		// создание тестового пользователя с административными правами       
        $login 	= "testUser1";
        $pass	= "testUser1";
        $email	= "test@mail.ru";
        $admin	= true;
        $data 	= compact("login", "pass", "email", "admin");
        $id		= "";
	    $base->addUser($data, $id);
	    $this->assertEquals(1, $id);
        
        
        /*
         $base       = &$GLOBALS["base"];
        */

    } // AddTestDataInDatabase

    /**
     * Метод удаляет все добавленные данные из базы
     * должен вызываться ПОСЛЕДНИМ
     */
    function DeleteTestDataInDatabase()
    {
        $base       = &$GLOBALS["base"];

        $q = $base->db_query("
            DELETE FROM 
            ".CATEGORIES_TABLE
        ) or die($base->db_error());

        $q = $base->db_query("
            DELETE FROM
            ".QUESTION_TABLE
        ) or die($base->db_error());
        

        $q = $base->db_query("
            DELETE FROM
            ".USERS_TABLE
        ) or die($base->db_error());
        
		
        // счетчики авто инкремента таблиц сбрасываем в ноль
        $q = $base->db_query("
            ALTER TABLE  
            ".CATEGORIES_TABLE.
            " AUTO_INCREMENT=0"
        ) or die($base->db_error());
        
        $q = $base->db_query("
            ALTER TABLE  
            ".QUESTION_TABLE.
            " AUTO_INCREMENT=0"
        ) or die($base->db_error());

        $q = $base->db_query("
            ALTER TABLE  
            ".USERS_TABLE.
            " AUTO_INCREMENT=0"
        ) or die($base->db_error());
        

    }

} // DataAddTest

/*! @} */

?>
